﻿using System.Net;
using System.Collections.Generic;
using System.Net.Mail;


namespace DepartmentOnline.Plugins
{
    public class EmailSender
    {
        private readonly Dictionary<string, int> _smtpMailStr = new Dictionary<string, int>()
        {
            {"gmail.com", 587},
            {"yandex.ru", 25},
            {"mail.ru ", 25}
        };  
        public bool SendMail(string mailFrom, string mailTo, string pass, string topic, string text, string[] files)
        {
            string smtp = mailFrom.Substring(mailFrom.IndexOf('@') + 1).Trim(' '); 
            int port;
            try
            {
                port = _smtpMailStr[smtp];
            }
            catch (SmtpException)
            {
                port = 25;
                // тут можно записать неизвестную почту
            }
            smtp = "smtp." + smtp; 
            using (var smtpClient = new SmtpClient(smtp, port))
            {
                smtpClient.EnableSsl = true;
                smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
                smtpClient.UseDefaultCredentials = false;
                smtpClient.Credentials = new NetworkCredential(mailFrom, pass);
                var message = new MailMessage {From = new MailAddress(mailFrom)};
                message.To.Add(new MailAddress(mailTo));
                message.Subject = topic;
                message.Body = text;
                if (files != null)
                {
                    foreach (string file in files)
                    {
                        // var stream = new MemoryStream(File.ReadAllBytes(file)); Сильно сомневаюсь что это комманда вообще нужна
                        var attachment = new Attachment(file);
                        message.Attachments.Add(attachment);
                    }
                }

                try
                {
                    smtpClient.Send(message);
                    return true;
                }
                catch (SmtpException)
                {
                    // Тут неплохо бы записать причину ошибки
                    return false;
                }
            }
        }
    }
}
